﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;
using System.Data;
using System.IO;
using System.Configuration;
using System.Transactions;
using System.Data.Linq;
using System.ComponentModel;
using UtilityExtensions;


namespace BOL.RendicionVentas
{
    public class GetRendicionVentaLiqList
    {
        int _count;
        public int Count(int idOrdenVenta, 
                         int startRowIndex,
                         int maximumRows,
                         string sortExpression)
        {
            return _count;
        }



        

        //private IQueryable<RendicionVentaLiqInfo> ApplySelect_ListInfo()
        //{
        //    var q = from a in DbUtil.Db.RendicionVentas
        //            select new RendicionVentaLiqInfo
        //            {
        //                clienteStr=a.Cliente.descripcion,
        //                fecha=a.fecha,
        //                fechaStr=a.fecha.ToShortDateString(),
        //                idCliente=a.idCliente,
        //                idInternal=a.idInternal,
        //                idProyecto=a.idProyecto,
        //                LiquidacionVenta=a.LiquidacionVentas,
        //                rendicionVentaItem=a.RendicionVentaItems,
        //                tipoCambio=a.tipoCambio,
        //                totalBase=a.totalBase
        //            };
        //    return q;
        //}
        private IQueryable<RendicionVentaLiqInfo> ApplySort(IQueryable<RendicionVentaLiqInfo> q, string sortExpression)
        {
            switch (sortExpression)
            {
                case "numDocumento":
                    q = q.OrderBy(b => b.numDocumento);
                    break;
                case "numDocumento DESC":
                    q = q.OrderByDescending(b => b.numDocumento);
                    break;

                case "fecha":
                    q = q.OrderBy(b => b.fecha);
                    break;
                case "fecha DESC":
                    q = q.OrderByDescending(b => b.fecha);
                    break;

                case "total":
                    q = q.OrderBy(b => b.total);
                    break;
                case "total DESC":
                    q = q.OrderByDescending(b => b.total);
                    break;

                      
                default:
                    q = q.OrderByDescending(b => b.fecha).OrderByDescending(p => p.numDocumento);
                    break;
            }
            return q;
        }



        [DataObjectMethod(DataObjectMethodType.Select, false)]
        public IEnumerable<RendicionVentaLiqInfo> Execute(int idOrdenVenta,
                                                            int startRowIndex,
                                                            int maximumRows,
                                                            string sortExpression)
        {


            var q = from a in DbUtil.Db.RendicionVentaItems
                    where a.OrdenVentaFormato.OrdenVentaItem.idOrdenVenta== idOrdenVenta
                    select new RendicionVentaLiqInfo
                    {
                        fecha=a.RendicionVenta.fecha,
                        fechaStr=a.RendicionVenta.fecha.ToShortDateString(),
                        idRendicionVenta=a.idRendicionVenta,
                        idInternal = a.RendicionVenta.idInternal,
                        idProyecto=a.RendicionVenta.idProyecto,
                        LiquidacionVenta=a.RendicionVenta.LiquidacionVentas,
                         numDocumento=a.RendicionVenta.numDocumento,
                         totalStr=string.Format("{0} {1:N}",a.OrdenVentaFormato.Moneda.simbol,a.total),
                         UIStr=a.OrdenVentaFormato.OrdenVentaItem.UI.descripcion,
                         concepto=a.OrdenVentaFormato.ConceptoItem.descripcion,
                         localizacion=string.Format("{0} {1}",a.OrdenVentaFormato.OrdenVentaItem.UI.UILocalizacion.descripcion,a.OrdenVentaFormato.OrdenVentaItem.UI.UIBloque.descripcion),
                         etapa=a.OrdenVentaFormato.OrdenVentaItem.UI.Etapa.descripcion,
                    };


            
            _count = q.Count();
            
            q = ApplySort(q, sortExpression);
            return q.Skip(startRowIndex).Take(maximumRows);
        }

    }
}
